package dataview;

import java.util.Collection;
import java.util.LinkedList;
import store.Menu;
import store.Portata;
import store.PortataBevanda;
import store.PortataCibo;
import store.PortataPiatto;

public class Menus extends LinkedList<Menu> {
	private static final long serialVersionUID = -8439280942605387098L;
	
	public Menus() {}
	
	public Menus(Collection<? extends Menu> c) {
		super(c);
	}
	
	public MenusVisCorta visCorta() {
		MenusVisCorta m = new MenusVisCorta();
		for (Menu menu : this)
			m.add(menu.visCorto());
		return m;
	}
	
	public MenusVis vis() {
		MenusVis mv = new MenusVis();
		for (Menu m : this)
			mv.add(m.vis());
		return mv;
	}
	
	/**
	 * Ritorna la sequenza di cibi che sono portate (senza ripetizioni)
	 */
	public Cibi cibiUsati() {
		Cibi cibi = new Cibi();
		for (Menu menu : this) {
			for (Portata portata : menu.getPortate()) {
				if (portata instanceof PortataCibo) {
					if (!cibi.contains(((PortataCibo)portata).getCibo())) cibi.add(((PortataCibo)portata).getCibo());
				} else if (portata instanceof PortataBevanda) {
					if (!cibi.contains(((PortataBevanda)portata).getBevanda())) cibi.add(((PortataBevanda)portata).getBevanda());
				}
			}
		}
		return cibi;
	}
	
	/**
	 * Ritorna la sequenza di ricette che definiscono delle portate (senza ripetizioni)
	 * 
	 * @return
	 */
	public Ricette ricetteUsate() {
		Ricette ricette = new Ricette();
		for (Menu menu : this)
			for (Portata portata : menu.getPortate()) {
				if (portata instanceof PortataPiatto)
					if (!ricette.contains(((PortataPiatto)portata).getRicetta())) ricette.add(((PortataPiatto)portata).getRicetta());
			}
		return ricette;
	}
	
}
